package ${basepackage}.${projectName}.service;

import ${basepackage}.${projectName}.domain.${table.className}Bean;
import ${basepackage}.${projectName}.domain.security.User;
import cc.hwtech.core.mybatis.domain.Page;
import cc.hwtech.core.mybatis.domain.PageRequest;

import java.util.List;

/**
 * <p>Project: bee-projects</p>
 * <p>Title: ${table.className}Service.java</p>
 * <p>Description:   </p>
 * <p>Copyright: Copyright (c) 2016 </p>
 * <p>Company: 华炜云商科技有限公司 www.hwtech.cc</p>
 *
 * @author zh
 * @version 1.0
 * @date 2017-03-09
 */
public interface ${table.className}Service {

    /**
     * 通过ID查找bean
     * @param id        [必填] ID
     * @param aId       [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return          如果能查询到，返回bean对象；如果查询不到，返回null
     */
    public ${table.className}Bean findBeanById(${table.idColumn.simpleJavaType} id, Integer aId);

    /**
     * 通过ID查找一个可用的bean
     * @param id        [必填] ID
     * @param aId       [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return          如果能查询到，且bean可用(状态等条件正常)，返回bean对象；查询不到，抛异常；
     */
    public ${table.className}Bean findAvailableBeanById(${table.idColumn.simpleJavaType} id, Integer aId);

    /**
     * 分页查找
     * @param pageRequest        [必填] PageRequest对象
     * @param ${table.classNameFirstLower}Bean        非必填，分页条件
     * @param aId                [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return                   分页对象
     */
    public Page<${table.className}Bean> findBeanPage(PageRequest pageRequest, ${table.className}Bean ${table.classNameFirstLower}Bean, Integer aId);

    /**
     * 查找所有指定条件对象
     * @param ${table.classNameFirstLower}Bean        [必填] 查询条件
     * @param aId                [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return                   满足条件的对象集合
     */
    public List<${table.className}Bean> findBeanAll(${table.className}Bean ${table.classNameFirstLower}Bean, Integer aId);

    /**
     * 新增
     * @param ${table.classNameFirstLower}Bean        [必填] 对象信息
     * @param user               [必填] 当操作用户
     */
    public void doAdd(${table.className}Bean ${table.classNameFirstLower}Bean, User user);

    /**
     * 编辑
     * @param ${table.classNameFirstLower}Bean        [必填] 对象信息
     * @param user               [必填] 当操作用户
     */
    public void doUpdate(${table.className}Bean ${table.classNameFirstLower}Bean, User user);

    /**
     * 软删除
     * @param id        [必填] ID
     * @param user      [必填] 当操作用户
     */
    public void doDel(${table.idColumn.simpleJavaType} id, User user);

    /**
     * 硬删除
     * @param id        [必填] ID
     * @param user      [必填] 当操作用户
     */
    public void doDelete(${table.idColumn.simpleJavaType} id, User user);
}